home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / GNU_Backgammon / gnubg-MAIN-20110822-setup.exe / {app} / gnubg.py < prev    next >
Text File  |  2007-07-02  |  3KB  |  100 lines

  1. #
  2. # gnubg.py
  3. #
  4. # This file is read by GNU Backgammon during startup.
  5. # You can add your own user specified functions, if you wish.
  6. # Below are a few examples for inspiration.
  7. #
  8. # Exercise: write a shorter function for calculating pip count!
  9. #
  10. # by Joern Thyssen <jth@gnubg.org>, 2003
  11. #
  12. #
  13. # This program is free software; you can redistribute it and/or modify
  14. # it under the terms of version 3 or later of the GNU General Public License as
  15. # published by the Free Software Foundation.
  16. #
  17. # This program is distributed in the hope that it will be useful,
  18. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20. # GNU General Public License for more details.
  21. #
  22. # You should have received a copy of the GNU General Public License
  23. # along with this program; if not, write to the Free Software
  24. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  25. #
  26. # $Id: gnubg.py,v 1.3 2007/07/02 12:50:13 ace Exp $
  27. #
  28.  
  29.  
  30. def swapboard(board):
  31.     """Swap the board"""
  32.  
  33.     return [board[1],board[0]];
  34.  
  35.  
  36. def pipcount(board):
  37.     """Calculate pip count"""
  38.  
  39.     sum = [0, 0];
  40.     for i in range(2):
  41.         for j in range(25):
  42.             sum[i] += ( j + 1 ) * board[i][j]
  43.  
  44.     return sum;
  45.  
  46.     
  47.  
  48. # Following code is intended as an example on the usage of the match command.
  49. # It illustrates how to iterate over matches and do something useful with the
  50. # navigate command.
  51.  
  52. import os.path
  53.  
  54. def skillBad(s) :
  55.   return s and (s == "very bad" or s == "bad" or s == "doubtful")
  56.  
  57. def exportBad(baseName) :
  58.   """ For current analyzed match, export all moves/cube decisions marked
  59.   doubtful or bad"""
  60.  
  61.   # Get current match
  62.   m = gnubg.match()
  63.  
  64.   # Go to match start
  65.   gnubg.navigate()
  66.  
  67.   # Skill of previous action, to avoid exporting double actions twice 
  68.   prevSkill = None
  69.  
  70.   # Exported position number, used in file name
  71.   poscount = 0
  72.   
  73.   for game in m["games"] :
  74.     for action in game["game"] :
  75.       
  76.       analysis = action.get("analysis", None)
  77.       if analysis :
  78.         type = action["action"]
  79.         skill = analysis.get("skill", None)
  80.         bad = skillBad(skill)
  81.         
  82.         if type == "move" :
  83.           if skillBad(analysis.get("cube-skill", None)) :
  84.             bad = True
  85.         elif type == "take" or type == "drop" :
  86.           if skillBad(prevSkill) :
  87.             # Already exported
  88.             bad = False
  89.  
  90.         if bad :
  91.           exportfile = "%s__%d.html" % (os.path.splitext(baseName)[0],poscount)
  92.           gnubg.command("export position html " + "\"" + exportfile + "\"")
  93.           poscount += 1
  94.  
  95.       # Advance to next record
  96.       gnubg.navigate(1)
  97.       
  98.     # Advance to next game
  99.     gnubg.navigate(game=1)
  100.